﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tesis2.Models;

namespace Tesis2.Controllers
{
    public class HomeController : Controller
    {
        private TesisDBContext db = new TesisDBContext();

        public ActionResult Index()
        {
            ViewBag.Message = "";

            return RedirectToAction("Login","Usuario"); ;
        }

        public ActionResult Home()
        {
            ViewBag.Message = "";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "";

            return View();
        }

        public JsonResult GetDataInventario()
        {
            var productos = db.Productos.ToList();
            int cantidad = 0;
            List<object> lista = new List<object>();

            var data = new object();

            foreach (var prod in productos)
            {
                var inventarioproducto = (from item in db.ProductoXAlmacenes
                                          where item.ProductoAlmacenID == prod.ProductoID
                                          select item).ToList();

                foreach (var p in inventarioproducto)
                {
                    cantidad += p.Stock;
                }

                lista.Add(new { Name = prod.Nombre, Value = cantidad });

                cantidad = 0;
            }



            return Json(lista);
        }

        public JsonResult GetDataSolicitud()
        {

            Parametro atendida = (from item in db.Parametros
                                  where item.CodigoUnico.Equals("ESTADOSOLICITUD") && item.Valor.Equals("Atendida")
                                  select item).FirstOrDefault();

            Parametro aprobada = (from item in db.Parametros
                                  where item.CodigoUnico.Equals("ESTADOSOLICITUD") && item.Valor.Equals("Aprobado")
                                  select item).FirstOrDefault();

            Parametro desaprobada = (from item in db.Parametros
                                     where item.CodigoUnico.Equals("ESTADOSOLICITUD") && item.Valor.Equals("Desaprobado")
                                     select item).FirstOrDefault();

            Parametro enviada = (from item in db.Parametros
                                 where item.CodigoUnico.Equals("ESTADOSOLICITUD") && item.Valor.Equals("Enviada")
                                 select item).FirstOrDefault();

            int solicitudesAtendida = (from item in db.Solicitudes
                                       where item.EstadoSolicitudID.Equals(atendida.ParametroID)
                                       select item).ToList().Count;

            int solicitudesAprobada = (from item in db.Solicitudes
                                       where item.EstadoSolicitudID.Equals(aprobada.ParametroID)
                                       select item).ToList().Count;

            int solicitudesDesaprobada = (from item in db.Solicitudes
                                          where item.EstadoSolicitudID.Equals(desaprobada.ParametroID)
                                          select item).ToList().Count;

            int solicitudesEnviada = (from item in db.Solicitudes
                                      where item.EstadoSolicitudID.Equals(enviada.ParametroID)
                                      select item).ToList().Count;

            List<object> lista = new List<object>();

            lista.Add(new { Name = "Atendida", Value = solicitudesAtendida });
            lista.Add(new { Name = "Enviada", Value = solicitudesEnviada });
            lista.Add(new { Name = "Aprobada", Value = solicitudesAprobada });
            lista.Add(new { Name = "Desaprobada", Value = solicitudesDesaprobada });

            return Json(lista);
        }

        public JsonResult GetDataDano()
        {

            // Dano Salud
            Parametro danoSalud = new Parametro();
            danoSalud = db.Parametros.Where(d => d.Nombre.Equals("SALUD")).ToList().FirstOrDefault();

            List<Dano> danosSalud = new List<Dano>();
            danosSalud = db.Danos.Where(d => d.UnidadDanoID.Equals(danoSalud.ParametroID)).ToList();

            List<DanoXEmergencia> dxeSalud = new List<DanoXEmergencia>();

            foreach (Dano dano in danosSalud)
            {
                dxeSalud.AddRange(db.DanoXEmergencias.Where(dxe => dxe.DanoEmergenciaID.Equals(dano.DanoID)));

            }

            // Dano Materiales
            Parametro danoMateriales = new Parametro();
            danoMateriales = db.Parametros.Where(d => d.Nombre.Equals("MATERIAL")).ToList().FirstOrDefault();

            List<Dano> danosMateriales = new List<Dano>();
            danosMateriales = db.Danos.Where(d => d.UnidadDanoID.Equals(danoMateriales.ParametroID)).ToList();

            List<DanoXEmergencia> dxeMateriales = new List<DanoXEmergencia>();

            foreach (Dano dano in danosMateriales)
            {
                dxeMateriales.AddRange(db.DanoXEmergencias.Where(dxe => dxe.DanoEmergenciaID.Equals(dano.DanoID)));

            }

            // Dano Comunicacion Publica
            Parametro danoCom = new Parametro();
            danoCom = db.Parametros.Where(d => d.Nombre.Equals("COMUNICACION")).ToList().FirstOrDefault();

            List<Dano> danosCom = new List<Dano>();
            danosCom = db.Danos.Where(d => d.UnidadDanoID.Equals(danoCom.ParametroID)).ToList();

            List<DanoXEmergencia> dxeCom = new List<DanoXEmergencia>();

            foreach (Dano dano in danosCom)
            {
                dxeCom.AddRange(db.DanoXEmergencias.Where(dxe => dxe.DanoEmergenciaID.Equals(dano.DanoID)));
            }

            // Dano Servicios Basicos
            Parametro danoServicio = new Parametro();
            danoServicio = db.Parametros.Where(d => d.Nombre.Equals("SERVICIOS")).ToList().FirstOrDefault();

            List<Dano> danosServicio = new List<Dano>();
            danosServicio = db.Danos.Where(d => d.UnidadDanoID.Equals(danoServicio.ParametroID)).ToList();

            List<DanoXEmergencia> dxeServicio = new List<DanoXEmergencia>();

            foreach (Dano dano in danosServicio)
            {
                dxeServicio.AddRange(db.DanoXEmergencias.Where(dxe => dxe.DanoEmergenciaID.Equals(dano.DanoID)));
            }

            List<object> lista = new List<object>();
            int cantidadSalud = 0;
            int cantidadMateriales = 0;
            int cantidadCom = 0;
            int cantidadServicio = 0;


            foreach (var p in dxeSalud)
            {

                cantidadSalud += p.Cantidad;

            }

            foreach (var p in dxeMateriales)
            {

                cantidadMateriales += p.Cantidad;

            }

            foreach (var p in dxeCom)
            {

                cantidadCom += p.Cantidad;

            }

            foreach (var p in dxeServicio)
            {

                cantidadServicio += p.Cantidad;

            }

            lista.Add(new { Name = "Daños a la Salud", Value = cantidadSalud });
            lista.Add(new { Name = "Daños Materiales", Value = cantidadMateriales });
            lista.Add(new { Name = "Daños a los Sistemas de Comunicación Pública", Value = cantidadCom });
            lista.Add(new { Name = "Daños a los Servicios Básicos", Value = cantidadServicio });

            return Json(lista);
        }
    }
}
